home *** CD-ROM | disk | FTP | other *** search
/ Adobe Graphics & Publishing SDK 1996 December / Adobe Graphics & Publishing SDK 1996 December.iso / mac / After Effects 3.1 SDK Mac / Examples / I⁄O Samples / Filmstrip FXIF / FILM_Add.c next >
Text File  |  1996-06-04  |  4KB  |  224 lines

  1. /**
  2.     FILM_Add.c
  3.     
  4.     Part of the Adobe After Effects 3.1 SDK    
  5.     Copyright (c)1993-96, Adobe Systems Inc, All Rights Reserved.
  6.  
  7.     Revision History
  8.         1.0, created by dmw
  9. **/
  10.  
  11. #include "PIFormatT.h"
  12. #include "Film.h"
  13.  
  14.  
  15. static OSErr SetFilmstripRec (
  16.                 short            fRefNum,
  17.                 FilmStripRec    *filmstrip )
  18. {
  19.     OSErr                err = 0;
  20.     long                count = sizeof(FilmStripRec);
  21.     
  22.     err = SetFPos(fRefNum, fsFromLEOF, -sizeof(FilmStripRec));
  23.     
  24.     if (!err) {
  25.         err = FSWrite(fRefNum, &count, filmstrip);
  26.     }
  27.  
  28.     return err;
  29. }
  30.  
  31.  
  32. void StartAddPrepare (Ptr Stuff, long *data, short *result)
  33. {
  34.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  35.     *result = 0;
  36.     
  37. }
  38.  
  39.  
  40. void StartAddStart (Ptr Stuff, long *data, short *result)
  41. {
  42.     OSErr                err;
  43.     FormatRecordTPtr    fpt = (FormatRecordTPtr)(Stuff - sizeof(TimeExtension));
  44.     myRevertInfo        **ri;
  45.     TimeInfoHandle        ti;
  46.     GWorldPtr            gworld = NULL;
  47.     Rect                grect;
  48.     ti = fpt->time_ext.time_info;
  49.     ri = (myRevertInfo**) NewHandle(sizeof(myRevertInfo));
  50.     
  51.     if (ri) {
  52.         long i;
  53.         fpt->revertInfo = (Handle)ri;
  54.         DH(ri)->rowsat = 0;
  55.         DH(ri)->dataH = NULL;
  56.         DH(ri)->film_rec.signature = 'Rand';
  57.         DH(ri)->film_rec.numFrames = 0;
  58.         DH(ri)->film_rec.duration = 0;
  59.         DH(ri)->film_rec.width = fpt->imageSize.h;
  60.         DH(ri)->film_rec.height = fpt->imageSize.v;
  61.         DH(ri)->film_rec.leading = FILM_LEAD;
  62.         DH(ri)->film_rec.framesPerSec = (DH(ti)->write_fixed_fps) >> 16;
  63.         DH(ri)->film_rec.flags = 0;
  64.         for (i=0; i<12; i++)
  65.             DH(ri)->film_rec.spare[i] = 0;
  66.         
  67.         grect.left = grect.top = 0;
  68.         grect.right = fpt->imageSize.h;
  69.         grect.bottom = FILM_LEAD;
  70.         err = NewGWorld(&gworld, 32, &grect, NULL, NULL, keepLocal); 
  71.         
  72.         if (!err) {
  73.             DH(ri)->number_wld = gworld;
  74.         }
  75.  
  76.     } else {
  77.         
  78.         err = memFullErr;
  79.     }
  80.     
  81.     if (err) {
  82.         if (ri) {
  83.             DisposeHandle((Handle)ri);
  84.             fpt->revertInfo = NULL;
  85.         }
  86.         
  87.         if (gworld) {
  88.             DisposeGWorld(gworld);
  89.         }
  90.     }
  91.  
  92.     *result = err;
  93. }
  94.  
  95.  
  96. void StartAddContinue (Ptr Stuff, long *data, short *result)
  97. {
  98.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  99.  
  100.     *result = 0;
  101.     
  102. }
  103.  
  104. void StartAddFinish (Ptr Stuff, long *data, short *result)
  105. {
  106.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  107.  
  108.     *result = 0;
  109.     
  110. }
  111.  
  112.  
  113. void EndAddPrepare (Ptr Stuff, long *data, short *result)
  114. {
  115.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  116.     
  117.     *result = 0;
  118.     
  119. }
  120.  
  121.  
  122. void EndAddStart (Ptr Stuff, long *data, short *result)
  123. {
  124.     OSErr                err = 0;
  125.     FormatRecordPtr        fp = (FormatRecordPtr)Stuff;
  126.     FormatRecordTPtr    fpt = (FormatRecordTPtr)(Stuff - sizeof(TimeExtension));
  127.     myRevertInfo        **ri;
  128.     TimeInfoHandle        ti;
  129.     Handle                yellowbarsH;
  130.     long                *yellowP;
  131.     long                black = 0;
  132.     long                yellow = 0xFFFF00FF;
  133.     
  134.     ti = fpt->time_ext.time_info;
  135.     ri = (myRevertInfo**) fpt->revertInfo;
  136.     
  137.     if (ri) {
  138.         long yellow_sz, i;
  139.         long bytes_written;
  140.         
  141.         err = SetFPos(fpt->dataFork, fsFromLEOF, 0);
  142.  
  143.         if (!err) {
  144.             yellow_sz = (long)(fp->imageSize.h + FILM_TRAIL);
  145.             // one scanline of yellow/black stripe
  146.             
  147.             yellowbarsH = NewHandle(yellow_sz * sizeof(long));
  148.             
  149.             if (yellowbarsH) {
  150.                 HLock(yellowbarsH);
  151.                 yellowP = (long*)*yellowbarsH;
  152.                 
  153.                 for (i=0; i<yellow_sz; i++) {
  154.                     if (i&4)
  155.                         *yellowP = black;
  156.                     else 
  157.                         *yellowP = yellow;
  158.                         
  159.                     yellowP++;
  160.                 }
  161.                 
  162.                 yellowP = (long*)*yellowbarsH;
  163.                 
  164.                 for (i=0; i<FILM_TRAIL; i++) {
  165.                     bytes_written = fp->imageSize.h * sizeof(long);
  166.                     err = FSWrite(fpt->dataFork, &bytes_written, yellowP);
  167.                     if (err) break;
  168.                     yellowP++;
  169.                 }
  170.                 
  171.                 DisposeHandle(yellowbarsH);
  172.                 
  173.                 if (!err) {
  174.                     FilmStripRec        rec;
  175.                     rec = DH(ri)->film_rec;
  176.  
  177.                     rec.duration = 30.0 * rec.numFrames / (double)rec.framesPerSec;
  178.  
  179.                     err = SetFilmstripRec(fp->dataFork, &rec);
  180.                 
  181.                 }
  182.                 
  183.             } else {
  184.                 err = memFullErr;
  185.             }
  186.         }
  187.         
  188.     } else {
  189.         err = formatBadParameters;
  190.     }
  191.     
  192.     if (fp->revertInfo) {
  193.         myRevertInfo        **ri = (myRevertInfo**)fp->revertInfo;
  194.         
  195.         if (DH(ri)->number_wld) {
  196.             DisposeGWorld(DH(ri)->number_wld);
  197.             DH(ri)->number_wld = NULL;
  198.         }
  199.         
  200.         DisposHandle(fp->revertInfo);
  201.     }
  202.     fp->revertInfo = NULL;
  203.     
  204.     *result = err;
  205. }
  206.  
  207.  
  208. void EndAddContinue (Ptr Stuff, long *data, short *result)
  209. {
  210.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  211.  
  212.     *result = 0;
  213.     
  214. }
  215.  
  216.  
  217. void EndAddFinish (Ptr Stuff, long *data, short *result)
  218. {
  219.     FormatRecordPtr    fp = (FormatRecordPtr)Stuff;
  220.  
  221.     *result = 0;
  222.     
  223. }
  224.